package com.mazaiting.emotion.util

import android.content.Context
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.text.Spannable
import android.text.SpannableString
import android.text.style.ImageSpan
import android.widget.TextView
import java.util.regex.Pattern

/***
 *
 *
 *                                                    __----~~~~~~~~~~~------___
 *                                   .  .   ~~//====......          __--~ ~~
 *                   -.            \_|//     |||\\  ~~~~~~::::... /~
 *                ___-==_       _-~o~  \/    |||  \\            _/~~-
 *        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
 *    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
 *  .~       .~       |   \\ -_    /  /-   /   ||      \   /
 * /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
 * |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
 *          '         ~-|      /|    |-~\~~       __--~~
 *                      |-~~-_/ |    |   ~\_   _-~            /\
 *                           /  \     \__   \/~                \__
 *                       _--~ _/ | .-~~____--~-/                  ~~==.
 *                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
 *                                 -_     ~\      ~~---l__i__i__i--~~_/
 *                                 _-~-__   ~)  \--______________--~~
 *                               //.-~~~-~_--~- |-------~~~~~~~~
 *                                      //.-~~~--\
 *                               神兽保佑
 *                              代码无BUG!
 * @author mazaiting
 * @date 2019-08-09
 * @description 富文本
 */
object SpanStringUtil {

    /**
     * 获取表情内容
     * @param context 上下文
     * @param type 类型
     * @param tv 文本显示
     * @param source 源
     */
    fun getEmotionContent(context: Context, type: Int, tv: TextView, source: String): SpannableString {
        // 富文本
        val spannableString = SpannableString(source)
        // 获取资源文件
        val res = context.resources
        // 表情正则
        val regexEmotion = "\\[([\u4e00-\u9fa5\\w])+\\]"
        // 正则匹配
        val patternEmotion = Pattern.compile(regexEmotion)
        // 匹配表情
        val matcherEmotion = patternEmotion.matcher(spannableString)
        // 查找
        while (matcherEmotion.find()) {
            // 获取匹配到的具体字符
            val key = matcherEmotion.group()
            // 匹配字符串的开始位置
            val start = matcherEmotion.start()
            // 利用表情名字获取到对应的图片
            val imgRes = EmotionUtil.getImgByName(type, key)
            // 压缩表情图片
            val size = tv.textSize.toInt() * 13 / 10
            // 获取图片 Bitmap
            val bitmap = BitmapFactory.decodeResource(res, imgRes)
            // 缩放
            val scaleBitmap = Bitmap.createScaledBitmap(bitmap, size, size, true)
            // 创建图片
            val span = ImageSpan(context, scaleBitmap)
            // 设置
            spannableString.setSpan(span, start, start + key.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
        }
        return spannableString
    }
}









